home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lang_c
/
cug106
/
bioslb.mac
< prev
next >
Wrap
Text File
|
1984-06-14
|
7KB
|
203 lines
TITLE BIOSLB Routine to interface 'C' to 'BIOS'
;
;
; Anyone may use this (or not as they please)
; for whatever purpose they wish
; H.R.Moran Jr. 1/31/80
;
;++ **************************************************
;
; TO USE THIS ROUTINE:
;
; M80 BIOSLB,BIOSLB=BIOSLB ...Microsoft 'M80'
; L80 BIOSYB,BIOSLB/N/E ...Microsoft 'L80'
; REN BIOS.CRL=BIOS.COM
;
; BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
; WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
; INTO YOUR LIBRARY WITH CLIB
;
; 'BDS C' calling sequence samples
;
;#define WARMBOOT 0
;#define CONST 1
;#define CONIN 2
;#define CONOUT 3
;#define LIST 4
;#define PUNCH 5
;#define READER 6
;#define HOME 7
;#define SELECT_DISK 8
;#define SET_TRACK 9
;#define SET_SECTOR 10
;#define SET_DMA 11
;#define READ_SECTOR 12
;#define WRITE_SECTOR 13
;
;
;char *dma_address;
;char c;
;int bios(); /* both B and C regs are loaded from 2'nd param */
; /* A reg is returned as fn value */
;int track,sector;
; .
; .
; .
; bios(SELECT_DISK,disk-'A');
; bios(SET_TRACK,track);
; bios(SET_SECTOR,sector);
; bios(SET_DMA,dma_address);
;
;
; if( (c=bios(READ_SECTOR,DUMMY_ARGUMENT)) != 0 )
; exit(puts("\nError in reading absolute sector"));
; .
; .
; .
;
; while(1) {
; if( (c=bios(CONST,DUMMY_PARAMETER) ) /* keystruck */
; break;
; .
; .
; .
; } /* end while */
; c = bios(CONIN,DUMMY_PARAMETER); /* get the char */
; if( c >= ' ' ) /* it is visable */
; bios(CONOUT,c);
; else { /* make it visable */
; bios(CONOUT,'^');
; bios(CONOUT,c +'A');
; }
;
;
;
;-- **************************************************
;
MAGIC EQU 3F7H ;'BDS C' PARAMETER PASSING BUFFER
;
ASEG
ORG 100H
.PHASE 0
;
ZERO: DC 'BIOS' ;MODULE NAME
DW BIOSHEAD ;LOCATION OF LABEL 'BIOSHEAD' IN FILE
DB 80H ;END OF DIRECTORY ENTRIES
DW FINIS - 100H ;POINTER TO NEXT AVAIL LOCATION IN FILE
DS (512 -($-ZERO)) ;PAD REST OF DIRECTORY
DS 5 ;RESERVED FOR 'CLIB'
;
.DEPHASE
;
PAGE
;
; THE BIOS() CODE HEADER ENTRY
;
.PHASE $-100H
;
BIOSHEAD:
DB 0 ;NO EXTERNAL 'BDS C' ROUTINES NEEDED
DW BIOSSTOP-BIOS ;LENGTH OF THIS ROUTINE
;
.DEPHASE
;
; THE BODY OF BIOS()
;
.PHASE 0
;
BIOS: PUSH B ;SAVE TH 'BDS C' STACK POINTER
LXI H,BIOSBACK ;INTERMEDIATE RETURN ADRESS
PUSH H ;STACK IT
LHLD MAGIC + 2 ;HL = PARAMETER TO PASS TO BIOS
MOV B,H
MOV C,L ;BC = PARAMETER TO PASS TO BIOS
LDA MAGIC ; A = FUNCTION NUMBER
MOV D,A
ADD A
ADD D ; A = (FUNCTION NUMBER)*3
LHLD 1 ; HL = .(BIOS JUMP TABLE)
ADD L
MOV L,A
ADC H
SUB L
MOV H,A ; HL = (BIOS JUMP TABLE)[FUNCTION NUMBER]
PCHL ; GO TO BIOS ROUTINE, RETURN TO 'BIOSBACK'
;
BIOSBACK:
MVI H,0
MOV L,A
POP B ;RESTORE THE 'BDS C' STACK POINTER
RET ;TO THE 'BDS C' ROUTINE WHICH INVOKED 'BIOS'
;
BIOSSTOP:
;
; RELOCATION PARAMETERS
;
DW 1 ;NUMBER OF NEEDED RELOCATION PARAMS
DW BIOS + 2 ;POINTER TO ADDRESS NEEDING RELOC
.DEPHASE
FINIS: END ZERO
iskette for drive B:
and strike any key when ready$Press any key to begin formatting B: $System transferred
$Format another (Y/N)?$
$Invalid characters in volume label
$Invalid drive specification$Invalid parameter$Insert DOS disk in drive x:
and strike any key when ready$Format failure
$Disk unsuitable for system disk
$Track 0 bad - disk unusable
$Insufficient memory forBIOSLB Routine to interface 'C' to 'BIOS' MACRO-80 3.31 29-Jun-79 PAGE 1
1 TITLE BIOSLB Routine to interface 'C' to 'BIOS'
2 ;
3 ;
4 ; Anyone may use this (or not as they please)
5 ; for whatever purpose they wish
6 ; H.R.Moran Jr. 1/31/80
7 ;
8 ;++ **************************************************
9 ;
10 ; TO USE THIS ROUTINE:
11 ;
12 ; M80 BIOSLB,BIOSLB=BIOSLB ...Microsoft 'M80'
13 ; L80 BIOSYB,BIOSLB/N/E ...Microsoft 'L80'
14 ; REN BIOS.CRL=BIOS.COM
15 ;
16 ; BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
17 ; WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
18 ; INTO YOUR LIBRARY WITH CLIB
19 ;
20 ; 'BDS C' calling sequence samples
21 ;
22 ;#define WARMBOOT 0
23 ;#define CONST 1
24 ;#define CONIN 2
25 ;#define CONOUT 3
26 ;#define LIST 4
27 ;#define PUNCH 5
28 ;#define READER 6
29 ;#define HOME 7
30 ;#define SELECT_DISK 8
31 ;#define SET_TRACK 9
32 ;#define SET_SECTOR 10
33 ;#define SET_DMA 11
34 ;#define READ_SECTOR 12
35 ;#define WRITE_SECTOR 13
36 ;
37 ;
38 ;char *dma_address;
39 ;char c;
40 ;int bios(); /* both B and C regs are loaded from 2'nd param */
41 ; /* A reg is returned as fn value */
42 ;int track,sector;
43 ; .
44 ; .
45 ; .
46 ; bios(SELECT_DISK,disk-'A');
BIOSLB Routine to interface 'C' to 'BIOS' MACRO-80 3.31 29-Jun-79 PAGE 1-1
47 ; bios(SET_TRACK,track);
48 ; bios(SET_SECTOR,sector);
49 ; bio